package net.ufrog.common;

import org.slf4j.LoggerFactory;

/**
 * 日志
 * 
 * @author ultrafrog
 * @version 1.0, 2012-11-29
 * @since 1.0
 */
public class Logger {

    private static org.slf4j.Logger logger 	= LoggerFactory.getLogger(CoreConfig.getLoggerName());
    private static Boolean caller 			= Boolean.FALSE;

    /**
     * @return 判断结果
     */
    public static boolean isTraceEnabled() {
        return getLogger().isTraceEnabled();
    }

    /**
     * @param msg 消息
     */
    public static void trace(String msg) {
        if (!isTraceEnabled()) return;
        getLogger().trace(msg);
    }

    /**
     * @param msg 消息
     * @param args 参数数组
     */
    public static void trace(String msg, Object... args) {
        if (!isTraceEnabled()) return;
        getLogger().trace(String.format(msg, args));
    }

    /**
     * @param msg 消息
     * @param t 异常
     */
    public static void trace(String msg, Throwable t) {
        if (!isTraceEnabled()) return;
        getLogger().trace(msg, t);
    }

    /**
     * @return 判断结果
     */
    public static boolean isDebugEnabled() {
        return getLogger().isDebugEnabled();
    }

    /**
     * @param msg 消息
     */
    public static void debug(String msg) {
        if (!isDebugEnabled()) return;
        getLogger().debug(msg);
    }

    /**
     * @param msg 消息
     * @param args 参数数组
     */
    public static void debug(String msg, Object... args) {
        if (!isDebugEnabled()) return;
        getLogger().debug(String.format(msg, args));
    }

    /**
     * @param msg 消息
     * @param t 异常
     */
    public static void debug(String msg, Throwable t) {
        if (!isDebugEnabled()) return;
        getLogger().debug(msg, t);
    }

    /**
     * @return 判断结果
     */
    public static boolean isInfoEnabled() {
        return getLogger().isInfoEnabled();
    }

    /**
     * @param msg 消息
     */
    public static void info(String msg) {
        if (!isInfoEnabled()) return;
        getLogger().info(msg);
    }

    /**
     * @param msg 消息
     * @param args 参数数组
     */
    public static void info(String msg, Object... args) {
        if (!isInfoEnabled()) return;
        getLogger().info(String.format(msg, args));
    }

    /**
     * @param msg 消息
     * @param t 异常
     */
    public static void info(String msg, Throwable t) {
        if (!isInfoEnabled()) return;
        getLogger().info(msg, t);
    }

    /**
     * @return 判断结果
     */
    public static boolean isWarnEnabled() {
        return getLogger().isWarnEnabled();
    }

    /**
     * @param msg 消息
     */
    public static void warn(String msg) {
        if (!isWarnEnabled()) return;
        getLogger().warn(msg);
    }

    /**
     * @param msg 消息
     * @param args 参数数组
     */
    public static void warn(String msg, Object... args) {
        if (!isWarnEnabled()) return;
        getLogger().warn(String.format(msg, args));
    }

    /**
     * @param msg 消息
     * @param t 异常
     */
    public static void warn(String msg, Throwable t) {
        if (!isWarnEnabled()) return;
        getLogger().warn(msg, t);
    }

    /**
     * @return 判断结果
     */
    public static boolean isErrorEnabled() {
        return getLogger().isErrorEnabled();
    }

    /**
     * @param msg 消息
     */
    public static void error(String msg) {
        if (!isErrorEnabled()) return;
        getLogger().error(msg);
    }

    /**
     * @param msg 消息
     * @param args 参数数组
     */
    public static void error(String msg, Object... args) {
        if (!isErrorEnabled()) return;
        getLogger().error(String.format(msg, args));
    }

    /**
     * @param msg 消息
     * @param t 异常
     */
    public static void error(String msg, Throwable t) {
        if (!isErrorEnabled()) return;
        getLogger().error(msg, t);
    }

    /**
     * @param caller 调用信息
     * @return 日志
     */
    public static org.slf4j.Logger getLogger(Boolean caller) {
        return caller ? LoggerFactory.getLogger(Caller.caller(5).getClassName()) : logger;
    }

    /**
     * @return 日志
     */
    public static org.slf4j.Logger getLogger() {
        if (caller == null) caller = CoreConfig.getLoggerCaller();
        return getLogger(caller);
    }
}